package com.dhecp.project.system.mapper;

import com.dhecp.core.genericDao.GenericDao;
import com.dhecp.core.layui.TreeDataModel;
import com.dhecp.project.system.domain.MailAddressBook;
import com.dhecp.project.system.domain.MailContent;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

/**
 * 邮件系统 DAO 接口
 * @author DH-Xxj
 * @version 2020年9月18日
 */
public interface MailContentMapper extends GenericDao<MailContent, String>{

	/**
	 * 查询草稿邮件数
	 * @param fromUser 必要参数：查询用户（发件人）
	 * @return int - mailCgCount
	 * @author DH-Xxj
	 */
	int selectCgs(Map<String, Object> params);

	/**
	 * 查询未读邮件数
	 * @param recUser 必要参数：查询用户（收件人）
	 * @return int - mailWdCount
	 * @author DH-Xxj
	 */
	int selectWds(Map<String, Object> params);
	
	/**
	 * 通过邮件Guid验证是否已存在指定邮件
	 * @param guid
	 * @return MailContent 实体
	 * @author DH-Xxj
	 */
	MailContent checkMainContentByGuid(@Param("guid") String guid);

	/**
	 * 通过邮件Guid查询所有收件人
	 * @param guid
	 * @return List - MailContent
	 * @author DH-Xxj
	 */
	List<MailContent> findRecipientByGuid(@Param("guid") String guid);
	
	/**
	 * 通过收件人Guid查询邮件详细内容（含收件人列表信息）
	 * @param guid
	 * @return MailContent 实体
	 * @author DH-Xxj
	 */
	MailContent findMailContentByGuid(Map<String, Object> params);
	
	/**
	 * 通过邮件Guid查询发件箱信息、邮件发件人、邮件主要内容（不含收件人列表信息）
	 * @param guid
	 * @return MailContent 实体
	 * @author DH-Xxj
	 */
	MailContent findMainContentByGuid(Map<String, Object> params);
	
	/**
	 * 查询邮件详细内容（含收件人列表信息）
	 * @return List - MailContent
	 * @author DH-Xxj
	 */
	List<MailContent> findMailContentList(Map<String, Object> params);
	
	/**
	 * 查询发件箱信息、邮件发件人、邮件主要内容（不含收件人列表信息）
	 * @return List - MailContent
	 * @author DH-Xxj
	 */
	List<MailContent> findMainContentList(Map<String, Object> params);
	
	/**
	 * 查询已删除邮件
	 * @return
	 * @author DH-Xxj
	 */
	List<MailContent> findDeletedMailList(Map<String, Object> params);
	
	/**
	 * 查询保留邮件
	 * @return
	 * @author DH-Xxj
	 */
	List<MailContent> findPerpetualMailList(Map<String, Object> params);
	
	/**
	 * 获取邮件系统地址簿树
	 * @param userId 当前登录用户编号
	 * @return List
	 * @author DH-Xxj
	 */
	List<TreeDataModel> findMailAddressBookTree(Map<String, Object> params);

    /**
     * 新增邮件主表信息（发件人、主要内容）
     * @param mailContent
     * @return
     * @author DH-Xxj
     */
    int insertMainContent(MailContent mailContent);

    /**
     * 新增邮件收件人信息
     * @param mailContent
     * @return
     * @author DH-Xxj
     */
    int insertRecipient(MailContent mailContent);

    /**
     * 新增邮件系统地址簿信息
     * @param mailAddressBook
     * @return
     * @author DH-Xxj
     */
    int insertMailAddressBook(MailAddressBook mailAddressBook);
    
    /**
     * 修改邮件主表信息（主题、正文、收件人类型编码、收件人、抄送类型编码、抄送、密送类型编码、密送、发送时间、邮件状态[已发送、草稿、撤销]、附件关联、邮件标签、重要邮件、删除标记、彻底删除标记）
     * @param mailContent
     * @return
     * @author DH-Xxj
     */
    int updateMainContent(MailContent mailContent);

    /**
     * 修改邮件状态（已发送、草稿、撤销）
     * @param guid
     * @param mailType 邮件状态（已发送、草稿、撤销）
     * @return
     * @author DH-Xxj
     */
    int updateMainContentForMailType(Map<String, Object> params);

    /**
     * 修改发件箱重要邮件标记
     * @param guid
     * @param important 重要邮件
     * @return
     * @author DH-Xxj
     */
    int updateMainContentForImportant(Map<String, Object> params);

    /**
     * 修改收件箱重要邮件标记
     * @param guid
     * @param important 重要邮件
     * @return
     * @author DH-Xxj
     */
    int updateRecipientForImportant(Map<String, Object> params);

    /**
     * 修改发件箱保留邮件标记
     * @param guid
     * @param perpetual 保留邮件
     * @return
     * @author DH-Xxj
     */
    int updateMainContentForPerpetual(Map<String, Object> params);

    /**
     * 修改收件箱保留邮件标记
     * @param guid
     * @param perpetual 保留邮件
     * @return
     * @author DH-Xxj
     */
    int updateRecipientForPerpetual(Map<String, Object> params);

    /**
     * 修改发件箱邮件标签
     * @param guid
     * @param mailLabel 邮件标签
     * @return
     * @author DH-Xxj
     */
    int updateMainContentForMailLabel(Map<String, Object> params);

    /**
     * 修改收件箱邮件标签
     * @param guid
     * @param mailLabel 邮件标签
     * @return
     * @author DH-Xxj
     */
    int updateRecipientForMailLabel(Map<String, Object> params);

    /**
     * 修改收件箱已读标记、阅读时间
     * @param guid
     * @param readed 已读标记
     * @param readTime 阅读时间
     * @return
     * @author DH-Xxj
     */
    int updateRecipientForReaded(Map<String, Object> params);

    /**
     * 修改发件箱删除标记
     * @param guid
     * @param deleted 删除标记
     * @return
     * @author DH-Xxj
     */
    int updateMainContentForDeleted(Map<String, Object> params);

    /**
     * 修改收件箱删除标记
     * @param guid
     * @param deleted 删除标记
     * @return
     * @author DH-Xxj
     */
    int updateRecipientForDeleted(Map<String, Object> params);

    /**
     * 修改发件箱彻底删除标记
     * @param guid
     * @param deletedSup 彻底删除标记
     * @return
     * @author DH-Xxj
     */
    int updateMainContentForDeletedSup(Map<String, Object> params);

    /**
     * 修改收件箱彻底删除标记
     * @param guid
     * @param deletedSup 彻底删除标记
     * @return
     * @author DH-Xxj
     */
    int updateRecipientForDeletedSup(Map<String, Object> params);

    /**
     * 修改邮件系统地址簿分组名称
     * @param guid
     * @param title 分组名称
     * @return
     * @author DH-Xxj
     */
    int updateMailAddressBookForTitle(Map<String, Object> params);
    
    /**
     * 通过Guid删除邮件主表信息（发件人、主要内容）
     * @param guid
     * @return
     * @author DH-Xxj
     */
    int deleteMainContentByGuid(@Param("guid") String guid);

    /**
     * 通过Guid删除邮件收件人信息
     * @param guid
     * @return
     * @author DH-Xxj
     */
    int deleteRecipientByGuid(@Param("guid") String guid);

    /**
     * 通过PGuid删除邮件收件人信息
     * @param pGuid 邮件主表Guid
     * @return
     * @author DH-Xxj
     */
    int deleteRecipientByPGuid(@Param("pGuid") String pGuid);

    /**
     * 通过Guid删除邮件系统地址簿信息
     * @param guid
     * @return
     * @author DH-Xxj
     */
    int deleteMailAddressBookByGuid(@Param("guid") String guid);

    /**
     * 删除邮件系统地址簿无效信息（无上级且非顶级的记录）
     * @param guid
     * @return
     * @author DH-Xxj
     */
    int deleteMailAddressBookForInvalid(@Param("guid") String guid);

}
